#include "pincontrol.h"

PinControl::PinControl(QWidget *parent) : QWidget(parent)
{

}

PinControl::PinControl(const QString &Name, const QJsonObject &functionDetails, QWidget *parent)
    : QWidget(parent)
{
    QGroupBox *groupBox = new QGroupBox("轴销控制", this);
    groupBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    createPinControl(groupBox, functionDetails);

    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(groupBox);
    layout->setContentsMargins(0, 0, 0, 0);
    qDebug() << "测试是否进入轴销控制";

    setLayout(layout);
}

void PinControl::createPinControl(QGroupBox *groupBox, const QJsonObject &functionDetails)
{
    qDebug() << "functionDetails :" << functionDetails;
    QVBoxLayout *mainLayout = new QVBoxLayout();
    groupBox->setLayout(mainLayout);
    QJsonObject Details = functionDetails["Parameters"].toObject();

    // 创建用于放置按钮的窗口
    QWidget *RadioButtonWidget = new QWidget(groupBox);
    QVBoxLayout *RadioButtonLayout = new QVBoxLayout(RadioButtonWidget);
    RadioButtonWidget->setLayout(RadioButtonLayout);
    RadioButtonWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QJsonArray radiobuttonArray = Details["radiobutton"].toArray();
    qDebug() << "radiobuttonArray:" << radiobuttonArray;

    // 遍历 radiobuttonArray 列表
    for (int i = 0; i < radiobuttonArray.size(); ++i) {
        // 获取标签的名称
        QString labelName = radiobuttonArray[i].toString();

        // 创建标签内容
        QLabel *label = new QLabel(labelName, RadioButtonWidget);

        // 创建两个RadioButton，并设置 objectName 为标签的名称
        QRadioButton *openButton = new QRadioButton("打开", RadioButtonWidget);
        QRadioButton *closeButton = new QRadioButton("关闭", RadioButtonWidget);

        // 设置 objectName，便于后续根据对象名称来区分
        openButton->setObjectName(labelName + "_open");
        closeButton->setObjectName(labelName + "_close");

        // 连接信号和槽
        connect(openButton, &QRadioButton::clicked, this, &PinControl::onRadioButtonClicked);
        connect(closeButton, &QRadioButton::clicked, this, &PinControl::onRadioButtonClicked);

        // 创建新的Widget，使用QHBoxLayout
        QWidget *buttonWidget = new QWidget(RadioButtonWidget);
        QHBoxLayout *buttonLayout = new QHBoxLayout(buttonWidget);
        buttonLayout->addWidget(label);
        buttonLayout->addWidget(openButton);
        buttonLayout->addWidget(closeButton);
        buttonWidget->setLayout(buttonLayout);

        // 将新创建的Widget添加到RadioButtonWidget
        RadioButtonLayout->addWidget(buttonWidget);
    }

    mainLayout->addWidget(RadioButtonWidget);
}
/**********************************************
* @file       pincontrol.cpp
* @brief      为了根据每个 QLabel 的名字执行不同的操作，可以通过使用 QRadioButton 的 objectName 来区分不同的按钮，并在槽函数中进行判断。
*             在每个 QRadioButton 上设置一个合适的对象名,并在槽函数中根据 objectName 来判断具体是哪个按钮被点击了。
* @author     yfk
* @date       2025-03-06
**********************************************/

// 按钮点击的统一槽函数
void PinControl::onRadioButtonClicked()
{
    // 获取点击的按钮
    QRadioButton *clickedButton = qobject_cast<QRadioButton *>(sender());
    if (clickedButton) {
        QString buttonName = clickedButton->objectName();

        if (buttonName.endsWith("_open")) {
            // 获取对应的标签名称（比如 "lockBlock"）
            QString labelName = buttonName.mid(0, buttonName.length() - 5);
            qDebug() << labelName << "的打开按钮被点击";
            // 执行打开操作
            handleOpenAction(labelName);
        } else if (buttonName.endsWith("_close")) {
            QString labelName = buttonName.mid(0, buttonName.length() - 6);
            qDebug() << labelName << "的关闭按钮被点击";
            // 执行关闭操作
            handleCloseAction(labelName);
        }
    }
}

// 处理打开操作
void PinControl::handleOpenAction(const QString &labelName)
{
    if (labelName == "lockBlock") {
        // 执行 lockBlock 打开的相关操作
        qDebug() << "执行 lockBlock 打开操作";
    } else if (labelName == "liftBlock") {
        // 执行 liftBlock 打开的相关操作
        qDebug() << "执行 liftBlock 打开操作";
    } else if (labelName == "extend") {
        // 执行 extend 打开的相关操作
        qDebug() << "执行 extend 打开操作";
    }
}

// 处理关闭操作
void PinControl::handleCloseAction(const QString &labelName)
{
    if (labelName == "lockBlock") {
        // 执行 lockBlock 关闭的相关操作
        qDebug() << "执行 lockBlock 关闭操作";
    } else if (labelName == "liftBlock") {
        // 执行 liftBlock 关闭的相关操作
        qDebug() << "执行 liftBlock 关闭操作";
    } else if (labelName == "extend") {
        // 执行 extend 关闭的相关操作
        qDebug() << "执行 extend 关闭操作";
    }
}
